package com.suneee.role.dao;

import java.util.List;
import java.util.Map;

import com.suneee.context.page.Page;
import com.suneee.orm.Dao;
import com.suneee.role.bean.RoleDto;
import com.suneee.role.entity.Role;

public interface RoleDao extends Dao<Role, Integer> {

	/**
	 * 角色授权
	 * 
	 * @param roleId
	 * @param permissionIdList
	 */
	public int[] authorizedPermission(Integer roleId,
			List<Integer> permissionIdList);

	/**
	 * 删除角色
	 * 
	 * @param roleId
	 * @param enterpriseCode
	 * @return
	 */
	public int deleteRoleBySQL(Integer roleId, String enterpriseCode);

	/**
	 * 取消授权
	 * 
	 * @param roleId
	 * @param permissionIdList
	 * @return
	 */
	public int[] deleteRelationBySQL(Integer roleId,
			List<Integer> permissionIdList);

	/**
	 * 角色列表
	 * 
	 * @param dto
	 * @return
	 */
	public Page<Role> roleList(RoleDto dto);

	/**
	 * 角色详情
	 * 
	 * @param roleId
	 * @return
	 */
	public Role roleDetail(Integer roleId, String enterpriseCode);

	/**
	 * 为管理员添加角色
	 * 
	 * @param adminId
	 * @param roleIdList
	 */
	public int[] addAdminRole(Integer adminId, List<Integer> roleIdList);

	/**
	 * 取消管理员指定角色
	 * 
	 * @param adminId
	 * @param roleIdList
	 */
	public int[] cancelAdminRole(Integer adminId, List<Integer> roleIdList);

	/**
	 * 删除角色的所有权限
	 * 
	 * @param roleId
	 */
	public void deleteRolePermission(Integer roleId);

	/**
	 * 删除指定管理员的所有角色
	 * 
	 * @param adminId
	 */
	public void deleteAdminRoleByAdmin(Integer adminId);

	/**
	 * 获得管理员拥有的全部角色
	 * 
	 * @param adminId
	 * @return
	 */
	public List<Role> adminRoleList(Integer adminId, Boolean flag);

	/**
	 * 得到全部角色
	 * 
	 * @param dto
	 * @return
	 */
	public List<Role> roleListResult(RoleDto dto);

	/**
	 * 获得系统默认角色
	 * 
	 * @param name
	 * @param flag
	 * @return
	 */
	public List<Role> publicRoles(String name, String flag);

	/**
	 * 校验角色已经被使用
	 * 
	 * @param roleId
	 * @return
	 */
	public List<Map<String, Object>> checkIsUsed(Integer roleId);
	
	/**
	 * 校验角色名是否已被当前企业使用
	 * @param role
	 * @return
	 */
	public Boolean checkExistRole(Role role);
}
